import org.junit.Test;

import java.util.Arrays;

/**
 *  数组 Array
 *  数组相当于一堆相同数据类型的数据；
 */



public class 数组 {
//1.数组定义：4种,创建数组初始化【静态初始化，给定值】动态初始化：无给定值】
    @Test
    public void testArray(){
        //注意：数组定义长度，不能改变
        int[] arr1=new int[4];//java推荐写法 动态初始化
        int arr2[]=new int[4];//c推荐写法Java兼容 动态初始化
        int[] arr3={1,2,3};//静态初始化数组，元素可以直接使用
        int[] arr4=new int[]{1,2,3};//动态初始化
        //数组：内部存数据叫做元素
        //从arr3取出 2的元素
        System.out.println(arr3[1]);
        //从arr3的长度
        System.out.println(arr3.length);
        //从arr4获取到 第四个元素值
        //System.out.println(arr4[4]);//报错 ArrayIndexOutOfBoundsException
    }
    /**
     * 数组的迭代（遍历：输出数组所有元素值）三种
     * 1普通迭代方式：for
     * 2.增强for方式：推荐：JDK1.5之后
     * 3.工具类：Arrays
     */
    @Test
    public void testIterate(){
        int[] arr={1,2,3,4};//静态初始化数组
        for(int i=0;i<arr.length;i++){ //拿数组下标
            System.out.println(arr[i]); }
        //增强for jdk1.5   遍历数组目的：拿元素前
        for (int j:arr){ //增强for语法：（遍历数据类型 引用：数组名）
            System.out.println(j);
        }
        //工具类：Arrays.toString()直接打印数量元素值
        System.out.println(Arrays.toString(arr));
    }
    /**
     * 数组扩容：数组长度是固定，不可改变【可以使用扩容改数组长度】
     */
    @Test
    public void testCopy(){
        //字符数组，数组长度固定：2个
        char[] arr={'唐','山'};  //想法：长度增加为4
        //扩容：增加4个
       char[] temp=Arrays.copyOf(arr,4);
        arr=temp;
        arr[2]='工';
        arr[3]='业';
       System.out.println(arr);
       //需求：输出唐山工业
    }
    /**
     * 数组输出元素，会有一些不同，【查看数据是否数组】
     * 数据类型：基础数据类型+引用类型
     */
    @Test
    public void testArrays(){
        //字符数组
        char[] chian={'中','国'};
        System.out.println(chian); //输出：中国---字符串
        //数值数组--JavaOOP面向对象：重载，字符数组自动拼接
        int[] i={1,2};
        System.out.println(i);//输出：[I数据类型@ 连接符 3d82c5f3地址值

    }
    /**
     * 冒泡排序：双层for循环使用：外层for执行一次，执行全部
     */
    @Test
    public void bubbleSort(){
        //静态初始化数组
        int[] arr={3,6,4,1};  //  升序输出：1,3,4,6
            // 0  1  2  3   4轮，然后我们上面算出来是3轮，所以我们要-1；
          for (int i=0;i<arr.length-1;i++){     //①外层for控制论 i=0 1 2  3轮
           for(int j=0;j<arr.length-1-i;j++){   //②内层for控制次  j=3轮递减-[3~1]次
               //③交换：第一个元素比第二个元素大，条件成立：交换【升序】
               if(arr[j]>arr[j+1]) {// 【相邻元素】 数组名[下标]
                   //创建第三方数组，接受  变量名：temp
                  int temp=arr[j];  //大的元素交给第三方变量保存
                   arr[j]=arr[j+1]; //第二个元素换给第一个元素位置
                   arr[j+1]=temp;   //保存第三方变量【大数】交给第二个元素

               }
           }
       }
        System.out.println(Arrays.toString(arr));//输出数组【遍历数组】
    }
    @Test
    public void testSort(){
        int[] arr={3,6,4,1};
        //工具类 Arrays.sort()方法排序，默认升序
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
    }

}










